// 处理文件最终输出到哪里
const path = require('path');
// 处理html
const HtmlWebpackPlugin = require('html-webpack-plugin');
// 处理css
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const webpack = require('webpack');

//  __dirname 当前目录，在它的基础上找到 dist
// path.resolve(__dirname, 'dist') 就是在当前目录下去找 dist目录, 如果没有就建立一个
module.exports = {
  entry: './src/app.jsx',
  output: {
    path: path.resolve(__dirname, 'dist'),
    publicPath: '/dist/',
    filename: 'js/app.js'
  },
  // 项目中路径的重新配置, alias 设置路径别名
  resolve: {
    alias: {
      page: path.resolve(__dirname, 'src/page'),
      component: path.resolve(__dirname, 'src/component'),
      util: path.resolve(__dirname, 'src/util'),
      service: path.resolve(__dirname, 'src/service')
    }
    
  },
  // 配置 webpack-dev-serve
  devServer: {
    // 1. proxy: webpack-dev-serve 提供的自动代理到后端接口上; target, 要代理的字段, 这里注意，我们只是更改了域名，后面的路径不用加
    // 2. historyApiFallback 的配置是来解决，我们每次更改了或者刷新了页面，路径都会重新发起后端请求，然后经常要重新输入地址能出来页面。那么用这个就是当我们访问一个路径返回是404的时候，那么就会返回这里指定的页面
    // 用法：在 index 这里配置一个 需要跳转的路径.   设置完之后，如果出现 404（输入任何奇怪的路径） 或者 说你代码更改了，都会跳转到你设置的这个路径的 React 页面
    // 因为上面配置了 publicPath: '/dist', 所以contentBase就不要了
    // 3. contentBase: './dist'
    port: 8086,
    historyApiFallback: {
      index: '/dist/index.html'
    },
    proxy : {
      '/manage' : {
          target: 'http://admintest.happymmall.com',
          changeOrigin : true
      },
      '/user' : {
        target: 'http://admintest.happymmall.com',
        changeOrigin : true
      }
    }
  },
  plugins: [
    // 处理html文件
    new HtmlWebpackPlugin({
      template: './src/index.html',
      favicon: './favicon.ico'
    }),
    // 独立css文件
    new ExtractTextPlugin("css/[name].css"),
    // 提出公共模块
    new webpack.optimize.CommonsChunkPlugin({
      name: 'common',
      // 编译后的名字和路径
      filename: 'js/base.js'
    })
  ],
  module: {
    rules: [
      // react(jsx)语法的处理,env做babel环境转化的工具
      {
        test: /\.jsx$/,
        exclude: /(node_modules)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['env', 'react']
          }
        }
      },
      // css 文件的处理
      {
        test: /\.css$/,
        use: ExtractTextPlugin.extract({
          fallback: "style-loader",
          use: "css-loader"
        })
      },
      // sass 文件的处理
      {
        test: /\.scss$/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: ['css-loader', 'sass-loader']
        })
      },
      // 图片的处理
      {
        test: /\.(png|jpg|gif)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192,
              name: 'resource/[name].[ext]'
            }
          }
        ]
      },
      // 字体图标的配置
      {
        test: /\.(eot|svg|ttf|woff|woff2)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192,
              // 修改编译字体图片后的文件夹位置和名字 后缀名
              name: 'resource/[name].[ext]'
            }
          }
        ]
      }
    ]
  }
};